package com.itheima.dubbo.interfaces;

import com.itheima.commons.model.domain.UserInfo;
import com.itheima.commons.model.domain.UserStatus;
import com.itheima.commons.model.vo.*;

import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * 用户信息表 接口
 */
public interface UserInfoApi {
    /**
     * 新增用户信息
     *
     * @param userInfo
     */
    void addUserInfo(UserInfo userInfo);

    /**
     * 更新用户的头像
     *
     * @param uid
     * @param pictureURL
     */
    void updateLogo(Long uid, String pictureURL);

    /**
     * 根据user_id字段查询一个userinfo
     *
     * @param uid
     * @return
     */
    UserInfo findUserInfoByUserId(Long uid);

    /**
     * 根据一个user_id集合查询一个List<UserInfo>
     *
     * @param userInfo
     * @param userIds
     * @return
     */
    Map<Long, UserInfo> findUserInfoListByUserIds(UserInfo userInfo, List<Long> userIds);

    Map<Long, UserInfo> findUserInfoListByUserIds(List<Long> userIds);

    /**
     * 更新用户个人信息
     *
     * @param userInfo
     */
    void updateUserInfoByUserId(UserInfo userInfo);


    List<UserInfo> queryUserInfoList(Set<Long> userIds);
    //根据userId查询userStatus对象
    UserStatus queryUserStatusByUid(Long userId);

    //多条件查询userInfo根据指定的字段
    List<UserInfo> queryAllUserInfoMatchFields(Integer page, Integer pagesize, String nickname, String city);

    //根据ids集合查寻出userStatus集合
    List<UserStatus> queryAllUserStatusMatchFields(List<Long> userIds);

    //更新用户的userStatus状态
    void updateUserStatusByUserId(Long userId, String userStatus);

    //查询某一天的活跃用户数
    Long queryOneDayActiveUser(Date date);

    //查询出符合注册时间的用户
    List<UserInfo> queryUserByCreateDate(String startDate, String endDate);

    //行业分布
    List<IndustryDistributionVo> queryNewUserIndustryCount(List<Long> userIds, List<String> industryStrList);

    //性别分布
    List<GenderDistributionVo> queryNewUserGenderCount(List<Integer> sexList, List<Long> userIds);

    //省份分布
    List<LocalDistributionVo> queryNewUserProvinceCount(List<String> provinceList, List<Long> userIds);

    //地区分布
    LocalTotalVo queryNewUserArea(String area, List<String> list, List<Long> userIds);

    //查询每天的新增用户
    List<ReturnDataVo> queryPeriodNewUserCount(List<String> dateList);

    //查询每天的活跃用户
    List<ReturnDataVo> queryPeriodActiveUserCount(List<String> dateList);

    //查询一段时期的次日留存率
    List<ReturnDataVo> queryPeriodRetentionRate(List<String> thisYearDateList);

}
